package ufit.profilecreation; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Date; import org.achartengine.ChartFactory; import org.achartengine.model.TimeSeries; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import ufit.global.MyApp; import ufit.namespace.R; import ufit.profile.Profile; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.widget.Button; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.content.Context; public class Progress extends Activity implements OnClickListener{ /** Called when the activity is first created. */ private Profile profile; private MyApp application; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.progress); application = (MyApp)getApplication(); profile = application.getProfile(); initializeButtons(); loadInformation(); } public Intent initGraph() { ArrayList<Double> storedWeights= new ArrayList<Double>(); ArrayList<Long> storedDates = new ArrayList<Long>(); BufferedReader read = null; String newTitle = profile.getUsername() + "_progress.txt"; //long offset = 1000*60*60*4; long offset = 0; try { read = new BufferedReader(new InputStreamReader(openFileInput(newTitle))); while (read.ready()){ storedWeights.add(Double.parseDouble(read.readLine())); storedDates.add(Long.parseLong(read.readLine())); } read.close(); read = null; } catch (Exception e) { Toast.makeText(this, "Progress Reading Failed", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } Date[] x = new Date[storedDates.size()]; Double[] y = new Double[storedWeights.size()]; for (int i =0; i<storedDates.size(); i++){ x[i] = new Date(storedDates.get(i) - offset); y[i] = storedWeights.get(i); } double minWeight = y[0]; double maxWeight = y[0]; for (int i=0; i<storedDates.size(); i++){ if (y[i] < minWeight){ minWeight = y[i]; } if (y[i] > maxWeight){ maxWeight = y[i]; } } if (minWeight > profile.getTargetWeight() ) { minWeight = profile.getTargetWeight(); } if (maxWeight < profile.getTargetWeight() ) { maxWeight = profile.getTargetWeight(); } TimeSeries series = new TimeSeries("Weight (lbs)"); for (int i =0; i < x.length; i++) { series.add(x[i],y[i]); } TimeSeries target = new TimeSeries("Target Weight"); target.add(x[0], profile.getTargetWeight()); target.add(x[(x.length-1)], profile.getTargetWeight()); XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); dataset.addSeries(series); dataset.addSeries(target); XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); XYSeriesRenderer renderer = new XYSeriesRenderer(); renderer.setColor(Color.YELLOW); mRenderer.addSeriesRenderer(renderer); XYSeriesRenderer renderer2 = new XYSeriesRenderer(); renderer2.setColor(Color.RED); mRenderer.addSeriesRenderer(renderer2); mRenderer.setXTitle("Date"); mRenderer.setYTitle("Weight"); if ((minWeight - 30) < 0) { minWeight = 30; } mRenderer.setYAxisMin(minWeight-30); mRenderer.setYAxisMax(maxWeight+30); Intent lineIntent = ChartFactory.getTimeChartIntent(this, dataset, mRenderer, "Weight Loss Progress"); return lineIntent; } public void initializeButtons() { Button getProgressGraph = (Button) findViewById(R.id.progress_button_graph); Button save = (Button) findViewById(R.id.progress_button_save); Button back = (Button) findViewById(R.id.progress_button_back); Button reset = (Button) findViewById(R.id.reset_progress); getProgressGraph.setOnClickListener(this); save.setOnClickListener(this); back.setOnClickListener(this); reset.setOnClickListener(this); } private void loadInformation() { EditText et; et = (EditText) findViewById(R.id.progress_edittext_curweight); et.setText("" + profile.getWeight()); TextView name = (TextView) findViewById(R.id.progress_textview_bmidisplay); name.setText(Double.toString(profile.computeBMI())); name = (TextView) findViewById(R.id.progress_textview_caloriedisplay); name.setText(Double.toString(profile.getCalories())); } private void updateInformation() { EditText etWeight = (EditText) findViewById(R.id.progress_edittext_curweight); String weight = etWeight.getText().toString(); if(weight.length() > 0 && !weight.equals(".")) { profile.setWeight(Double.parseDouble(weight)); } else { profile.setWeight(0.0); } ((MyApp)getApplication()).saveProfile(); PrintWriter progress = null; BufferedReader read = null; String newTitle = profile.getUsername() + "_progress.txt"; try { read = new BufferedReader(new InputStreamReader(openFileInput(newTitle))); ArrayList<Double> storedWeights= new ArrayList<Double>(); ArrayList<Long> storedDates = new ArrayList<Long>(); while (read.ready()){ storedWeights.add(Double.parseDouble(read.readLine())); storedDates.add(Long.parseLong(read.readLine())); } read.close(); progress = new PrintWriter(openFileOutput(newTitle, Context.MODE_PRIVATE)); for (int i =0; i <storedWeights.size(); i++){ progress.println(storedWeights.get(i)); progress.println(storedDates.get(i)); } progress.println(weight); Date currentDate = new Date(); progress.println(currentDate.getTime()); progress.close(); progress = null; } catch (Exception e) { Toast.makeText(this, "Progress Tracker Failed", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } finally { if(progress != null) progress.close(); } /*application.saveProfile(); String u = profile.getUsername(); application.setProfile(u, application);*/ loadInformation(); } //@Override public void onClick(View v) { if(v.getId() == R.id.progress_button_graph){ startActivity(initGraph()); } else if(v.getId() == R.id.progress_button_back){ Intent intent = new Intent(this,HomeScreen.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); this.startActivity(intent); //finish(); } else if(v.getId() == R.id.reset_progress){ Intent intent = new Intent(this,DeleteProgress.class); this.startActivity(intent); } else if(v.getId() == R.id.progress_button_save){ updateInformation(); } } public void onPause() { super.onPause(); ((MyApp)getApplication()).saveProfile(); } }